const jwt = require('jsonwebtoken')
const { JWT_SECRET } = require('../config/config.default')
const { tokenExpiredError, jsonWebTokenError } = require('../constant/err.type')
const auth = async (ctx, next) => {
  const { authorization } = ctx.request.header
  const token = authorization.replace('Bearer', '')?.trim()
  // console.log('token', token)
  try {
    const user = jwt.verify(token, JWT_SECRET)
    ctx.state.user = user
  } catch (err) {
    switch (err.name) {
      case 'TokenExpiredError':
        console.error('token已过期', err)
        return ctx.app.emit('error', tokenExpiredError, ctx)
      case 'JsonWebTokenError':
        console.error('无效的token', err)
        return ctx.app.emit('error', jsonWebTokenError, ctx)
      default:
        console.error('其他错误', err)
        return ctx.app.emit('error', { code: "999999", message: '其他错误', data: {} }, ctx)
    }
  }
  await next()
}

module.exports = {
  auth
}